#include <iostream>

// 单例模式

// 饿汉模式

// class Singleton
// {
// private:
//     static Singleton _eton;

// private:
//     Singleton() : _data(666) {  std::cout << "单例Singleton 饿汉, 构造函数" << std::endl;  };
//     ~Singleton() {};
//     Singleton(const Singleton &) = delete;
//     Singleton &operator=(const Singleton &) = delete;

// private:
//     int _data;

// public:
//     static Singleton &getInstance()
//     {
//         return _eton;
//     }

//     int getData()
//     {
//         return _data;
//     }
// };

// Singleton Singleton::_eton;

// int main()
// {
//     std::cout << Singleton::getInstance().getData() <<std::endl;
//     return 0;
// }




// 懒汉模式

class Singleton
{
private:
    Singleton() : _data(666) {  std::cout << "单例Singleton 懒汉, 构造函数" << std::endl;  };
    ~Singleton() {};
    Singleton(const Singleton &) = delete;
    Singleton &operator=(const Singleton &) = delete;

private:
    int _data;

public:
    static Singleton &getInstance()
    {
        static Singleton _eton;
        return _eton;
    }

    int getData()
    {
        return _data;
    }
};


int main()
{
    std::cout << Singleton::getInstance().getData() <<std::endl;
    return 0;
}